diff options
Diffstat (limited to 'app/[lng]/partners')
| -rw-r--r-- | app/[lng]/partners/pq/page.tsx | 9 | ||||
| -rw-r--r-- | app/[lng]/partners/pq_new/[id]/page.tsx | 3 | ||||
| -rw-r--r-- | app/[lng]/partners/pq_new/page.tsx | 64 | ||||
| -rw-r--r-- | app/[lng]/partners/site-visit/page.tsx | 30 |
4 files changed, 83 insertions, 23 deletions
diff --git a/app/[lng]/partners/pq/page.tsx b/app/[lng]/partners/pq/page.tsx index 71741c6c..87bcd409 100644 --- a/app/[lng]/partners/pq/page.tsx +++ b/app/[lng]/partners/pq/page.tsx @@ -10,11 +10,14 @@ export const dynamic = "force-dynamic" export default async function PQInputPage({ searchParams, }: { - searchParams: { projectId?: string } + searchParams: Promise<{ projectId?: string }> }) { // Opt out of caching for this route noStore() + // searchParams를 await + const resolvedSearchParams = await searchParams + // 세션 const session = await getServerSession(authOptions) // 세션에서 vendorId 가져오기 @@ -26,7 +29,7 @@ export default async function PQInputPage({ const projectPQs = await getPQProjectsByVendorId(idAsNumber) // searchParams에서 projectId 파싱 - const projectIdParam = searchParams.projectId + const projectIdParam = resolvedSearchParams.projectId const projectId = projectIdParam ? parseInt(projectIdParam, 10) : undefined // 현재 선택된 프로젝트를 위한 PQ 데이터 가져오기 @@ -40,7 +43,7 @@ export default async function PQInputPage({ pqData={selectedProjectPQData} projectPQs={projectPQs} vendorId={idAsNumber} - rawSearchParams={searchParams} + rawSearchParams={resolvedSearchParams} /> ) }
\ No newline at end of file diff --git a/app/[lng]/partners/pq_new/[id]/page.tsx b/app/[lng]/partners/pq_new/[id]/page.tsx index 52085163..41c59b47 100644 --- a/app/[lng]/partners/pq_new/[id]/page.tsx +++ b/app/[lng]/partners/pq_new/[id]/page.tsx @@ -110,11 +110,14 @@ export default async function PQEditPage(props: PQEditPageProps) { const pageTitle = pqSubmission.type === "PROJECT" ? `프로젝트 PQ - ${pqSubmission.projectName || pqSubmission.projectCode}` + : pqSubmission.type === "NON_INSPECTION" + ? "미실사 PQ" : "일반 PQ"; // 프로젝트 정보 (프로젝트 PQ인 경우) const projectPQ = pqSubmission.projectId ? { id: pqSubmission.projectId, + projectId: pqSubmission.projectId, projectCode: pqSubmission.projectCode || '', projectName: pqSubmission.projectName || '', status: pqSubmission.status, diff --git a/app/[lng]/partners/pq_new/page.tsx b/app/[lng]/partners/pq_new/page.tsx index f822eacc..389a35a2 100644 --- a/app/[lng]/partners/pq_new/page.tsx +++ b/app/[lng]/partners/pq_new/page.tsx @@ -6,7 +6,7 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; -import { LogIn, Edit, Eye } from "lucide-react"; +import { LogIn, Edit, Eye, Ellipsis } from "lucide-react"; import { Shell } from "@/components/shell"; import { Table, @@ -19,6 +19,13 @@ import { import { unstable_noStore as noStore } from 'next/cache'; import { getAllPQsByVendorId, getPQStatusCounts } from "@/lib/pq/service"; import { InformationButton } from "@/components/information/information-button"; +import { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, +} from "@/components/ui/dropdown-menu"; + export const metadata: Metadata = { title: "사전 평가 (PQ) 목록", description: "요청된 사전 평가 목록을 확인하고 작성합니다.", @@ -218,8 +225,14 @@ export default async function PQListPage() { return ( <TableRow key={pq.id}> <TableCell> - <Badge variant={pq.type === "PROJECT" ? "secondary" : "outline"}> - {pq.type === "PROJECT" ? "프로젝트" : "일반"} + <Badge variant={ + pq.type === "PROJECT" ? "default" : + pq.type === "NON_INSPECTION" ? "secondary" : + "outline" + }> + {pq.type === "PROJECT" ? "프로젝트" : + pq.type === "NON_INSPECTION" ? "미실사" : + "일반"} </Badge> </TableCell> <TableCell> @@ -238,24 +251,35 @@ export default async function PQListPage() { {getFormattedDate(pq.approvedAt)} </TableCell> <TableCell> - <div className="flex gap-2"> - {canEdit && ( - <Button size="sm" variant="outline" asChild> - <Link href={`/partners/pq_new/${pq.id}`}> - <Edit className="w-4 h-4 mr-1" /> - 작성 - </Link> - </Button> - )} - {canView && ( - <Button size="sm" variant="outline" asChild> - <Link href={`/partners/pq_new/${pq.id}`}> - <Eye className="w-4 h-4 mr-1" /> - 보기 - </Link> + <DropdownMenu> + <DropdownMenuTrigger asChild> + <Button + aria-label="액션 메뉴 열기" + variant="ghost" + className="flex size-8 p-0 data-[state=open]:bg-muted" + > + <Ellipsis className="size-4" aria-hidden="true" /> </Button> - )} - </div> + </DropdownMenuTrigger> + <DropdownMenuContent align="end" className="w-36"> + {canEdit && ( + <DropdownMenuItem asChild> + <Link href={`/partners/pq_new/${pq.id}`}> + <Edit className="mr-2 h-4 w-4" /> + 작성 + </Link> + </DropdownMenuItem> + )} + {canView && ( + <DropdownMenuItem asChild> + <Link href={`/partners/pq_new/${pq.id}`}> + <Eye className="mr-2 h-4 w-4" /> + 보기 + </Link> + </DropdownMenuItem> + )} + </DropdownMenuContent> + </DropdownMenu> </TableCell> </TableRow> ); diff --git a/app/[lng]/partners/site-visit/page.tsx b/app/[lng]/partners/site-visit/page.tsx new file mode 100644 index 00000000..92580b35 --- /dev/null +++ b/app/[lng]/partners/site-visit/page.tsx @@ -0,0 +1,30 @@ +import { getServerSession } from "next-auth"
+import { authOptions } from "@/app/api/auth/[...nextauth]/route"
+import { getSiteVisitRequestsByVendorId } from "@/lib/site-visit/service"
+import { ClientSiteVisitWrapper } from "@/lib/site-visit/client-site-visit-wrapper"
+import { unstable_noStore as noStore } from 'next/cache'
+
+// 페이지가 기본적으로 동적임을 나타냄
+export const dynamic = "force-dynamic"
+
+export default async function SiteVisitPage() {
+ // Opt out of caching for this route
+ noStore()
+
+ // 세션
+ const session = await getServerSession(authOptions)
+ // 세션에서 vendorId 가져오기
+ const vendorId = session?.user.companyId
+ const idAsNumber = Number(vendorId)
+
+ // 방문실사 요청 목록 가져오기
+ const siteVisitRequests = await getSiteVisitRequestsByVendorId(idAsNumber)
+
+ // 클라이언트 컴포넌트로 데이터 전달
+ return (
+ <ClientSiteVisitWrapper
+ siteVisitRequests={siteVisitRequests}
+ vendorId={idAsNumber}
+ />
+ )
+}
\ No newline at end of file |
